{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Predicting Terrorist Attacks\n",
    "## Weapon Classification\n",
    "\n",
    "**Author:** Thomas Skowronek\n",
    "\n",
    "**Date:** April 04, 2018"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Notebook Configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import accuracy_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Display up to 150 rows and columns\n",
    "pd.set_option('display.max_rows', 150)\n",
    "pd.set_option('display.max_columns', 150)\n",
    "\n",
    "# Set the figure size for plots\n",
    "mpl.rcParams['figure.figsize'] = (14.6, 9.0)\n",
    "\n",
    "# Set the Seaborn default style for plots\n",
    "sns.set()\n",
    "\n",
    "# Set the color palette\n",
    "sns.set_palette(sns.color_palette(\"muted\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load the Datasets\n",
    "Load the dataset created by the EDA notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Load the preprocessed GTD dataset\n",
    "gtd_df = pd.read_csv('../data/gtd_eda_95t016.csv', low_memory=False, index_col = 0,\n",
    "                      na_values=[''])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Inspect the Structure\n",
    "The cleansed data frame contains 48 attributes, one of which is used for the data frame index, and 110,844 observations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 110844 entries, 199501000001 to 201701270001\n",
      "Data columns (total 48 columns):\n",
      "iyear               110844 non-null int64\n",
      "imonth              110844 non-null int64\n",
      "iday                110844 non-null int64\n",
      "country_txt         110844 non-null object\n",
      "region_txt          110844 non-null object\n",
      "provstate           110844 non-null object\n",
      "city                110844 non-null object\n",
      "latitude            110844 non-null float64\n",
      "longitude           110844 non-null float64\n",
      "specificity         110844 non-null float64\n",
      "summary             110844 non-null object\n",
      "attacktype1_txt     110844 non-null object\n",
      "targtype1_txt       110844 non-null object\n",
      "targsubtype1_txt    110844 non-null object\n",
      "corp1               110844 non-null object\n",
      "target1             110844 non-null object\n",
      "natlty1_txt         110844 non-null object\n",
      "gname               110844 non-null object\n",
      "nperpcap            110844 non-null float64\n",
      "weaptype1_txt       110844 non-null object\n",
      "weapsubtype1_txt    110844 non-null object\n",
      "nkill               110844 non-null float64\n",
      "nkillus             110844 non-null float64\n",
      "nkillter            110844 non-null float64\n",
      "nwound              110844 non-null float64\n",
      "nwoundus            110844 non-null float64\n",
      "nwoundte            110844 non-null float64\n",
      "scite1              110844 non-null object\n",
      "dbsource            110844 non-null object\n",
      "extended_txt        110844 non-null object\n",
      "vicinity_txt        110844 non-null object\n",
      "crit1_txt           110844 non-null object\n",
      "crit2_txt           110844 non-null object\n",
      "crit3_txt           110844 non-null object\n",
      "doubtterr_txt       110844 non-null object\n",
      "multiple_txt        110844 non-null object\n",
      "success_txt         110844 non-null object\n",
      "suicide_txt         110844 non-null object\n",
      "guncertain1_txt     110844 non-null object\n",
      "individual_txt      110844 non-null object\n",
      "claimed_txt         110844 non-null object\n",
      "property_txt        110844 non-null object\n",
      "ishostkid_txt       110844 non-null object\n",
      "INT_LOG_txt         110844 non-null object\n",
      "INT_IDEO_txt        110844 non-null object\n",
      "INT_MISC_txt        110844 non-null object\n",
      "INT_ANY_txt         110844 non-null object\n",
      "incident_date       110844 non-null object\n",
      "dtypes: float64(10), int64(3), object(35)\n",
      "memory usage: 41.4+ MB\n"
     ]
    }
   ],
   "source": [
    "# Display a summary of the data frame\n",
    "gtd_df.info(verbose = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convert Attributes to Correct Data Type\n",
    "Convert a subset of the data frame attributes to categorical to align with the GTD code book as executed previously in the EDA notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 110844 entries, 199501000001 to 201701270001\n",
      "Data columns (total 48 columns):\n",
      "iyear               110844 non-null int64\n",
      "imonth              110844 non-null int64\n",
      "iday                110844 non-null int64\n",
      "country_txt         110844 non-null category\n",
      "region_txt          110844 non-null category\n",
      "provstate           110844 non-null object\n",
      "city                110844 non-null object\n",
      "latitude            110844 non-null float64\n",
      "longitude           110844 non-null float64\n",
      "specificity         110844 non-null category\n",
      "summary             110844 non-null object\n",
      "attacktype1_txt     110844 non-null category\n",
      "targtype1_txt       110844 non-null category\n",
      "targsubtype1_txt    110844 non-null category\n",
      "corp1               110844 non-null object\n",
      "target1             110844 non-null object\n",
      "natlty1_txt         110844 non-null category\n",
      "gname               110844 non-null object\n",
      "nperpcap            110844 non-null float64\n",
      "weaptype1_txt       110844 non-null category\n",
      "weapsubtype1_txt    110844 non-null category\n",
      "nkill               110844 non-null float64\n",
      "nkillus             110844 non-null float64\n",
      "nkillter            110844 non-null float64\n",
      "nwound              110844 non-null float64\n",
      "nwoundus            110844 non-null float64\n",
      "nwoundte            110844 non-null float64\n",
      "scite1              110844 non-null object\n",
      "dbsource            110844 non-null object\n",
      "extended_txt        110844 non-null category\n",
      "vicinity_txt        110844 non-null category\n",
      "crit1_txt           110844 non-null category\n",
      "crit2_txt           110844 non-null category\n",
      "crit3_txt           110844 non-null category\n",
      "doubtterr_txt       110844 non-null category\n",
      "multiple_txt        110844 non-null category\n",
      "success_txt         110844 non-null category\n",
      "suicide_txt         110844 non-null category\n",
      "guncertain1_txt     110844 non-null category\n",
      "individual_txt      110844 non-null category\n",
      "claimed_txt         110844 non-null category\n",
      "property_txt        110844 non-null category\n",
      "ishostkid_txt       110844 non-null category\n",
      "INT_LOG_txt         110844 non-null category\n",
      "INT_IDEO_txt        110844 non-null category\n",
      "INT_MISC_txt        110844 non-null category\n",
      "INT_ANY_txt         110844 non-null category\n",
      "incident_date       110844 non-null datetime64[ns]\n",
      "dtypes: category(27), datetime64[ns](1), float64(9), int64(3), object(8)\n",
      "memory usage: 21.7+ MB\n"
     ]
    }
   ],
   "source": [
    "# List of attributes that are categorical\n",
    "cat_attrs = ['extended_txt', 'country_txt', 'region_txt', 'specificity', 'vicinity_txt',\n",
    "             'crit1_txt', 'crit2_txt', 'crit3_txt', 'doubtterr_txt', 'multiple_txt',\n",
    "             'success_txt', 'suicide_txt', 'attacktype1_txt', 'targtype1_txt', \n",
    "             'targsubtype1_txt', 'natlty1_txt', 'guncertain1_txt', 'individual_txt', \n",
    "             'claimed_txt', 'weaptype1_txt', 'weapsubtype1_txt', 'property_txt', \n",
    "             'ishostkid_txt', 'INT_LOG_txt', 'INT_IDEO_txt','INT_MISC_txt', 'INT_ANY_txt']\n",
    "\n",
    "for cat in cat_attrs:\n",
    "    gtd_df[cat] = gtd_df[cat].astype('category')\n",
    "    \n",
    "\n",
    "# Data time feature added during EDA\n",
    "gtd_df['incident_date'] = pd.to_datetime(gtd_df['incident_date'])\n",
    "\n",
    "# To prevent a mixed data type\n",
    "gtd_df['gname'] = gtd_df['gname'].astype('str')\n",
    "\n",
    "gtd_df.info(verbose = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Training and Testing Datasets\n",
    "The original dataset is split into 80% training and 20% testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seed for reproducible results\n",
    "seed = 1009\n",
    "\n",
    "# Predictor variables with one hot encoding\n",
    "X = pd.get_dummies(gtd_df[['country_txt', 'region_txt', 'attacktype1_txt', 'nkill']], \n",
    "                   drop_first = True)\n",
    "\n",
    "# Labels\n",
    "y = gtd_df['weaptype1_txt']\n",
    "\n",
    "# Create an 80/20 split for training and testing data\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = seed, stratify = y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### KNN Classifier\n",
    "Create a KNN classifier using 12 neighbors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The KNN classifier parameter:\n",
      "\n",
      "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
      "           metric_params=None, n_jobs=1, n_neighbors=12, p=2,\n",
      "           weights='uniform')\n",
      "\n",
      "Test set predictions:\n",
      " ['Unknown' 'Explosives/Bombs/Dynamite' 'Explosives/Bombs/Dynamite' ...,\n",
      " 'Firearms' 'Explosives/Bombs/Dynamite' 'Firearms']\n",
      "\n",
      "Accuracy: 0.884388109522306\n",
      "\n",
      "Execution Seconds: 175.0124499797821\n"
     ]
    }
   ],
   "source": [
    "start = time.time()\n",
    "\n",
    "# Create the classifier\n",
    "knn1 = KNeighborsClassifier(n_neighbors = 12)\n",
    "print(\"The KNN classifier parameter:\\n\")\n",
    "print(knn1)\n",
    "\n",
    "# Fit it using the training data\n",
    "knn1.fit(X_train, y_train)\n",
    "\n",
    "# Predict the lables using the test dataset\n",
    "pred_lables1 = knn1.predict(X_test)\n",
    "\n",
    "# Display a sample of the predictions\n",
    "print(\"\\nTest set predictions:\\n {}\".format(pred_lables1))\n",
    "\n",
    "# Calculate the accuracy\n",
    "score1 = accuracy_score(y_test, pred_lables1)\n",
    "print(\"\\nAccuracy: {}\".format(score1))\n",
    "\n",
    "end = time.time()\n",
    "print(\"\\nExecution Seconds: {}\".format((end - start)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Find the Best K\n",
    "Iterate from 1 to 12 to find the best value for K."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Execution Seconds: 8970.889966964722\n"
     ]
    }
   ],
   "source": [
    "start = time.time()\n",
    "\n",
    "# Setup arrays to store train and test accuracies\n",
    "neighbors = np.arange(1, 12)\n",
    "train_accuracy = np.empty(len(neighbors))\n",
    "test_accuracy = np.empty(len(neighbors))\n",
    "\n",
    "# Loop over different values of k\n",
    "for i, k in enumerate(neighbors):\n",
    "    # Setup a k-NN Classifier with k neighbors: knn\n",
    "    knn2 = KNeighborsClassifier(n_neighbors=k)\n",
    "\n",
    "    # Fit the classifier to the training data\n",
    "    knn2.fit(X_train, y_train)\n",
    "    \n",
    "    #Compute accuracy on the training set\n",
    "    train_accuracy[i] = knn2.score(X_train, y_train)\n",
    "\n",
    "    #Compute accuracy on the testing set\n",
    "    test_accuracy[i] = knn2.score(X_test, y_test)\n",
    "\n",
    "\n",
    "end = time.time()\n",
    "print(\"Execution Seconds: {}\".format((end - start)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare the Training and Testing Scores\n",
    "Plot each of the training and testing scores."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n2+o46OReeOEF/eUvf9HixYs1cOBAPfroo8rLy7M6FjqxkSNHat26dTIMQ8eOHVMgEFBWVpbVsdBJ\nZWRkyOPxSJIyMzMVDocViUQsToXObtCgQdq4caMkae3atRo1apTFidAR2L4IUz355JNqamrS448/\nrscff1zS8Q+wckgDgHgwadIkbd68WbNnz5ZhGLrvvvv47CvO2i233KKf/vSnuuGGGxQKhbRo0SKl\npaVZHQud3N133617771Xv/71r3X++edr6tSpVkdCB7AZhmFYHQIAAAAAEhXbFwEAAADAQpQyAAAA\nALAQpQwAAAAALEQpAwAAAAALUcoAAAAAwEKUMgDA11JZWakBAwZo/fr1J/z45ZdfrsrKyq/983fU\nz3Mqhw8f1tSpU3XttdfK5/O1/fhrr72mSy65RDU1NW0/VllZqcsvv/yUP9+qVav0u9/97pT/zvz5\n89vuGvp799xzj1577bUz/BUAADozShkA4GtLSkrSvffee0Kh6Uw2bdqkIUOGaNmyZXK73Se85vf7\ndf/995/Rzzd58mTdeeedHRkRANCFUcoAAF9bfn6+xowZo0cfffSfXtu4caPmz5/f9vWXK0GVlZW6\n9tprtWjRIk2fPl133323XnrpJV1//fW68sortW/fvrbveeyxxzRjxgxdf/312rNnjySppqZG//Zv\n/6aZM2dq1qxZKi0tlST9/ve/16233qqrrrpKL7744glZPvvsM82fP1/Tp0/X9ddfr+3bt2v37t36\n7W9/q3Xr1um+++77p/xTp07VgQMH9Le//e2fXvP7/br77rs1c+ZMXXvttXrzzTclHV9hu+eee9p+\n/dOnT9eMGTP0wAMPnPDf4tVXX9V1112nyZMn691332378ffee08zZ87U9OnT9b//+7+SpGg0qgcf\nfFBXX321vvnNb+oPf/hD288/e/ZszZw5U3fffbc2bNigmTNnaubMmfqXf/kX1dXVneq3DgAQB5xW\nBwAAdA333HOPpk+frvXr12vs2LGn9T0VFRV6+OGHddFFF2nq1KnKz8/XkiVL9Nhjj2nJkiX66U9/\nKknq06ePHnnkEa1Zs0b33HOPXn/9df3Xf/2XZs2apcmTJ6uqqko33HCDXn/9dUlSMBhsKzN/7667\n7tLChQs1ZcoUlZeX684779Ty5cv1/e9/X5s2bdLPf/7zf/qepKQkPfzww7rjjjt06aWXnvDaE088\nocGDB+vRRx+Vz+fTvHnzNGzYsLbXQ6GQfvKTn+ipp57SRRddpAcffPCE7/d4PPrrX/+q1atX67HH\nHmvbFhkIBPTyyy+rtrZWs2bN0ujRo1VSUqIjR47ojTfeUDAY1Pz589W/f3+lpqZq//79Wr16tTwe\nj+bPn68HHnhAQ4cO1R//+Ed99NFHGjdu3Gn9fgAArMFKGQCgQ7jdbv3iF784o22Mubm5GjRokOx2\nu3r06NFWenr27Kmmpqa2f2/OnDmSpAkTJujw4cNqamrS/9/O3YTC2odxHP/OawzyMgsLUt5KNFIW\nZqGksGFM3rKwMCULNSslFtKkRDNWbOxkxVLJBmUjUhSS8pJEEilSSMzMs5CJM5zj9JynOU/9PquZ\n/9193f/r3l1d1/1fXV1lbGwMt9tNZ2cnLy8vnJ2dAVBcXBz1rPv7e05PT6mpqQGgpKSE5ORkjo+P\nf7lPh8NBU1NT1Bjj6uoqMzMzuN1u2traeHh44PDwMHL94OAAu91OQUEBAM3NzR/ur6qqAiAvL4+b\nm5vIekNDA2azmfT0dEpKStje3mZ9fZ2GhgZMJhPx8fG4XC7W1tYAyM7OJikpCXgdnfR6vQwODlJY\nWKiCTETkf0CdMhER+WPKy8ujxhgNBgPhcDjy//n5OfLbarV+uN9kMn0a9/16OBzGbDYTCoWYmpoi\nJSUFgKurK+x2O0tLS8TFxUXFeL+H92vBYPBbuXm9XhobGyMjivA6UhgIBCgqKgJeRyqTk5Mjo44m\nk4lQKPRlzLe8DAbDl/mGQiEsFktUnPd7f5+vx+OhsrKS5eVlAoEAOzs7dHV1fStHERGJDXXKRETk\nj+rr62NlZYWrqysAUlNTOTs74+npidvbWzY3N3875luRs7i4SG5uLjabDafTGflm7OjoCJfLxePj\n45cxEhMTyczMZGFhAYCtrS2ur6/Jz8//1h6sVivDw8NMTExE1pxOJ9PT08BrUVhfX8/FxUXkek5O\nDnd3d+zv73/I41fm5+cJh8Ocn5+zu7uLw+HA6XQyOztLMBjk8fGRubk5ysrKou5taWnh/v4ej8eD\nx+Nhb2/vW88UEZHYUadMRET+qLcxxo6ODgDy8/OpqKigtraWjIwMSktLfzvmyckJbrebhIQERkZG\nAOjv72dgYACXywWA3++POjnxR4FAAJ/Px/j4OBaLhfHx8ahu3c84HA7a29sjxZXX68Xn81FXV0cw\nGKSnp4esrCw2NjaA10LO7/fT29uL0WgkOzv70y7ej2w2G42Njby8vDA4OEhaWhqtra2R9/D8/IzL\n5aK6ujrqWP3u7m76+vowm83YbLao79hEROTvYwh/Ns8hIiIi/1ooFGJ0dBSv14vNZmNycpLLy8vI\nyYwiIiL9bdrhAAAAa0lEQVSgTpmIiMh/xmg0kpKSQnNzMxaLhYyMDIaGhmK9LRER+cuoUyYiIiIi\nIhJDOuhDREREREQkhlSUiYiIiIiIxJCKMhERERERkRhSUSYiIiIiIhJDKspERERERERiSEWZiIiI\niIhIDP0Db8q3G/mQTdgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a7ec265f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Generate plot\n",
    "plt.title('k-NN: Varying Number of Neighbors')\n",
    "plt.plot(neighbors, test_accuracy, label = 'Testing Accuracy')\n",
    "plt.plot(neighbors, train_accuracy, label = 'Training Accuracy')\n",
    "plt.legend()\n",
    "plt.xlabel('Number of Neighbors')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### KNN Classifier\n",
    "Create a KNN classifier using best K of 11 neighbors from the previous test."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The KNN classifier parameter:\n",
      "\n",
      "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
      "           metric_params=None, n_jobs=1, n_neighbors=11, p=2,\n",
      "           weights='uniform')\n",
      "\n",
      "Accuracy: 0.8858766746357526\n",
      "\n",
      "Execution Seconds: 177.72135090827942\n"
     ]
    }
   ],
   "source": [
    "start = time.time()\n",
    "\n",
    "# Create the classifier\n",
    "knn3 = KNeighborsClassifier(n_neighbors = 11)\n",
    "print(\"The KNN classifier parameter:\\n\")\n",
    "print(knn3)\n",
    "\n",
    "# Fit it using the training data\n",
    "knn3.fit(X_train, y_train)\n",
    "\n",
    "# Predict the lables using the test dataset\n",
    "pred_lables3 = knn3.predict(X_test)\n",
    "\n",
    "# Calculate the accuracy\n",
    "score3 = accuracy_score(y_test, pred_lables3)\n",
    "print(\"\\nAccuracy: {}\".format(score3))\n",
    "\n",
    "end = time.time()\n",
    "print(\"\\nExecution Seconds: {}\".format((end - start)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References\n",
    "\n",
    "Bowne-Anderson, H. (n.d.). Measuring model performance Retrieved from https://campus.datacamp.com/courses/supervised-learning-with-scikit-learn/classification?ex=9"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
